package com.yuanqi.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yuanqi.entity.WareTransfer;
import com.yuanqi.entity.WareTransferItem;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
* @author HP
* @description 针对表【ware_transfer(库存调拨单)】的数据库操作Service
* @createDate 2025-08-28 16:00:00
*/
public interface WareTransferService extends IService<WareTransfer> {
    
    /**
     * 分页查询调拨单列表
     * @param page 页码
     * @param size 每页数量
     * @param transferCode 调拨单号（可选）
     * @param fromWarehouseId 调出仓库ID（可选）
     * @param toWarehouseId 调入仓库ID（可选）
     * @param transferType 调拨类型（可选）
     * @param status 状态（可选）
     * @return 分页结果
     */
    IPage<WareTransfer> listTransfers(Integer page, Integer size, String transferCode, 
                                     Long fromWarehouseId, Long toWarehouseId, String transferType, Integer status);

    /**
     * 根据ID获取调拨单详情
     * @param id 调拨单ID
     * @return 调拨单详情（包含明细）
     */
    Map<String, Object> getTransferDetail(Long id);

    /**
     * 创建调拨单
     * @param transfer 调拨单信息
     * @param items 调拨明细
     * @return 是否成功
     */
    boolean createTransfer(WareTransfer transfer, List<WareTransferItem> items);

    /**
     * 更新调拨单
     * @param transfer 调拨单信息
     * @param items 调拨明细
     * @return 是否成功
     */
    boolean updateTransfer(WareTransfer transfer, List<WareTransferItem> items);

    /**
     * 提交审核
     * @param id 调拨单ID
     * @return 是否成功
     */
    boolean submitForAudit(Long id);

    /**
     * 审核通过
     * @param id 调拨单ID
     * @param approvedBy 审核人
     * @return 是否成功
     */
    boolean approveTransfer(Long id, String approvedBy);

    /**
     * 审核驳回
     * @param id 调拨单ID
     * @param approvedBy 审核人
     * @return 是否成功
     */
    boolean rejectTransfer(Long id, String approvedBy);

    /**
     * 完成调拨
     * @param id 调拨单ID
     * @param completedBy 完成人
     * @return 是否成功
     */
    boolean completeTransfer(Long id, String completedBy);

    /**
     * 删除调拨单
     * @param id 调拨单ID
     * @return 是否成功
     */
    boolean deleteTransfer(Long id);
}